// 这里用来放跟登录页面相关的vuex操作

// 先导入文件
// 导入login的请求
import { login, userInfo, userPhoto } from '@/api/user'
import { resetRouter } from '@/router'
// 导入关于cookie的方法
import { getToken, removeTime } from '@/utils/auth'
import { setToken } from '@/utils/auth'
import { removeToken } from '@/utils/auth'
// 导入事件戳的方法
import { getTime } from '@/utils/auth'
import { setTime } from '@/utils/auth'
import { clearTime } from '@/utils/auth'

// 设置state
const state = {
  token: getToken(),
  // 请求基本信息,设置一个空的对象
  userInfo: {},
}
// 设置mutations
const mutations = {
  setToken(state, token) {
    state.token = token
    setToken(token)
    setTime()
  },
  // 请求基本信息的mutations
  setUserInfo(state, payload) {
    state.userInfo = payload
  },
  //退出登录需要删除token
  removeToken(state) {
    state.token = null
    removeToken()
    // clearTime()
  },
  //退出登录需要删除信息
  removeUserInfo(state) {
    state.userInfo = {}
  },
}
// 设置actions
// 在响应拦截那里已经对错误信息进行处理,我们在这个中间商这里通知一下,请求成功使用try,失败使用catch
const actions = {
  async login(context, data) {
    try {
      // 传入请求成功的代码
      let res = await login(data)
      // console.log(res)
      context.commit('setToken', res.data)
    } catch (error) {
      // 传入请求失败的代码,返回这个信息
      return Promise.reject(res.message)
    }
  },
  // 请求基本信息的actions
  async getUserInfo(context) {
    let res = await userInfo()
    let res1 = await userPhoto(res.data.userId)
    let allInfo = {
      ...(res.data),
      ...(res1.data)
    }
    // 基本信息的获取值
    // console.log(res)
    // 头像等信息的获取
    // console.log(res1)
    // console.log(allInfo)
    context.commit('setUserInfo', allInfo)
    return allInfo
  },
  // 执行退出的actions
  // context中有commit和dispatch等方法
  logout(context) {
    context.commit('removeToken')
    context.commit('removeUserInfo')
    resetRouter()
    context.dispatch('tagsView/delAllViews', null, { root: true } )
  }
}

export default {
  // 我们可以将state,mutations,actions这几个属性值声明在外面
  namespaced: true,
  // 设置state
  state,
  // 设置mutations
  mutations,
  // 设置actions
  actions
}
